iT邦幫忙

2021 iThome 鐵人賽

DAY 23
0
Mobile Development

30天建立寵物約散App-Android新手篇系列 第 23

【day23】存local端 帳號 (SharedPreferences)

  • 分享至 

  • xImage
  •  

好的,因為我們有時候除了用Firebase之外,我們可能會用其它服務!而Firebase它的Auth除非有logout,否則它會保有登入的紀錄~ 那如果我們有些服務是會需要記住local的資料呢?我們就可以用SharedPreferences來紀錄資料!! 這次是額外的內容喔 小歇一下!!

依照 Key-Value的方式儲存資料

一、在創建一個新的class


class SharedPreference(content: Context) {

private val sharedPreference = content.getSharedPreferences("帳密",0)

fun saveEmail(email: String){
sharedPreference.edit().putString("信箱",email).apply()
    }

fun savePassword(pass: String){
sharedPreference.edit().putString("密碼",pass).apply()
    }

fun getEmail(): String?{
return sharedPreference.getString("信箱","")
    }
fun getPass(): String?{
return sharedPreference.getString("密碼","")
    }
}

首先可以注意到,實例化 sharedPreference的方法

private val sharedPreference = content.getSharedPreferences("帳密",0)

其中的第一個參數是檔案名稱,若是已有該名稱的檔案後,就會在新增資料的時候在該檔案新增資料,若無則直接創建新的

第二個參數,是mode,原本有許多模式,但由於隱私問題,其他mode幾乎都被棄用(可讓別的App存取或寫入)。現在比較推薦是用 MODE_PRIVATE 這個模式,int值為 0,只限當前APP使用。

ps.若有需要共享資料,可以用 FileProvider

https://ithelp.ithome.com.tw/upload/images/20211008/201380171G6Shqadsn.png

接下來看到寫入的方法,請使用 edit(),並在後面可以新增想要填入的值型態

(記住,都是Key-Value,所以這些裡面的引數前面都是Key)

  • putFloat()
  • putString()
  • putInt()
  • putBoolean()
  • putLong()

接下來也可以注意到,最後面寫了 apply(),儲存值的方法有兩種

  • commit: 立即更改內存,但會同步更新到磁碟,且因為該方法是占用主線,導致畫面被影響
  • apply:立即更新內存,但會異步
fun saveEmail(email: String){
sharedPreference.edit().putString("信箱",email).apply()
    }

取出資料的方式為

fun getEmail(): String?{
return sharedPreference.getString("信箱","")
    }

接下來就可以叫出來啦

存入

val sharedPreferences = SharedPreference(requireActivity())
sharedPreferences.saveEmail(viewModel.list[1])
sharedPreferences.savePassword(passWord)

叫出

val sharedPreference = SharedPreference(requireActivity())
val email = sharedPreference.getEmail()
val password = sharedPreference.getPass()

這樣就大功告成啦! 期待明天~


上一篇
【day22】FCM雲端通訊測試
下一篇
【day24】上傳多張照片(上)
系列文
30天建立寵物約散App-Android新手篇30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言